package tablero;



public class Personaje  implements Posicionable {
	private String nombre;
	public Coordenada coordenada;
	private int moveMax = 1;
	private int cantEsferasObtenidas;
	private Tablero mapa;

	public Personaje(String nombre, Coordenada coord, int moveMax, Tablero mapa) {
		this.nombre = nombre;
		this.coordenada = coord;
		this.moveMax = moveMax;
		this.cantEsferasObtenidas = 0;
		this.mapa = mapa;
	}

	public Personaje() {
	}

	public void llamarAShengLong() {
		if (this.getCantEsferasObtenidas() > 7) {
			this.setCantEsferasObtenidas(0);
		}
	}

	public void obtenerEsfera(Esfera e) {
		if (this.puedeMoverseA(e.getCoordenada())) {
			int x = this.getCantEsferasObtenidas();
			x++;
			this.setCantEsferasObtenidas(x);
			this.moverseALaCoordenada(e.getCoordenada());
			this.mapa.quitarEsfera(e);

		}

	}

	public boolean equals(Esfera e) {
		return this.getNombre().equals(e.getNombre());
	}

	protected void moverseALaCoordenada(Coordenada c) {
		if (this.puedeMoverseA(c)) {
			this.setCoordenada(c);
		}
	}

	public boolean puedeMoverseA(Coordenada c) {
		return this.getCoordenada().diferenciaConCoord(c) <= this.getMoveMax();
	}

	protected void moverse(Direccion d) {
		Coordenada coordActual = this.getCoordenada();
		coordActual = coordActual.siguienteCoord(d);
		this.setCoordenada(coordActual);
	}

	public void setNombre(String name) {
		this.nombre = name;
	}

	public String getNombre() {
		return nombre;
	}

	public void setCoordenada(Coordenada coordenada) {
		this.coordenada = coordenada;
	}

	public Coordenada getCoordenada() {
		return coordenada;
	}

	/**
	 * Este metodo retorna un booleano que indica si esta en la coordenada
	 * pasada por parametro.
	 * 
	 * @param Coordenada
	 *            coord
	 * @return boolean
	 */
	boolean estaEnLaCoordenada(Coordenada coord) {
		return this.getCoordenada().equals(coord);
	}

	public void setMoveMax(int moveMax) {
		if (moveMax < 1) {
			
				//	"Numero de cantidad de movimientos posibles "
						//	+ "no valido. Por favor ingrese un numero mayor a 0.";
		}
		this.moveMax = moveMax;
	}

	public int getMoveMax() {
		return moveMax;
	}

	public void setCantEsferasObtenidas(int cantEsferasObtenidas) {
		this.cantEsferasObtenidas = cantEsferasObtenidas;
	}

	public int getCantEsferasObtenidas() {
		return cantEsferasObtenidas;
	}

	public Tablero getMapa() {
		return mapa;
	}

	public void setMapa(Tablero mapa) {
		this.mapa = mapa;
	}

}
